package com.ycrlkj.android.modulespublic.common.net.Interceptor;

import androidx.annotation.NonNull;

import java.io.IOException;

import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;

/**
 * 网络请求拦截器
 *
 *
 * Interceptor 分 应用请求拦截器 和 网络请求拦截器 两种, 写法相同, 只是向 HttpClient 添加的方式不一样
 *
 * Application  Interceptors:
 * 不需要担心是否影响OKHttp的请求策略和请求速度
 * 即使从缓存中取数据，也会执行Application拦截器
 * 允许重试，即Chain.proceed()可以执行多次。
 * 可以监听观察这个请求的最原始的未改变的意图(请求头，请求体等)，无法操作OKHttp为我们自动添加额外的请求头
 * 无法操作中间的响应结果，比如当URL重定向发生以及请求重试，只能操作客户端主动第一次请求以及最终的响应结果

 * Network Interceptors:
 * 可以修改OkHttp框架自动添加的一些属性，即允许操作中间响应，比如当请求操作发生重定向或者重试等。
 * 可以观察最终完整的请求参数（也就是最终服务器接收到的请求数据和熟悉）
 *
 * 添加应用请求拦截器: new OkHttpClient.Builder().addInterceptor(new 应用请求拦截器()).build();
 * 添加网络请求拦截器: new OkHttpClient.Builder().addNetworkInterceptor(new 网络请求拦截器()).build();
 * 同时添加两种拦截器: new OkHttpClient.Builder().addInterceptor(new 应用请求拦截器()).addNetworkInterceptor(new 网络请求拦截器()).build();
 */
public class NetworkInterceptor  implements Interceptor {

        @NonNull
        @Override
        public Response intercept(Chain chain) throws IOException {
            //拿到Request对象
            Request request = chain.request();

            //拿到Response对象
            Response response = chain.proceed(request);

            return response;
        }

}
